package org.example.emp.pojo;


import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * 考勤表
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Attendance {

    @TableId(value = "attendance_id")
    private Integer attendanceId; // 考勤ID
    private Integer employeeId; // 员工，一对多关系


    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime date; // 考勤日期，不允许为空

    private String status; // 出勤状态
}
/*
* @TableId
* @TableId注解是专门用在主键上的注解
* 如果数据库中的主键字段名和实体中的属性名，不一样且不是驼峰之类的对应关系，
* 可以在实体中表示主键的属性上加@Tableid注解，并指定@Tableid注解的value属性值为表中主键的字段名既可以对应上。
* */

/* @JsonFormat：处理时间格式化问题
 * JSON传参，格式化前端传参和后端返回给前端的时间格式，
 * 传参可能不一定是json，但是一般接口向前端返回数据，基本上都是封装的统一返回格式，然后JSON返回。
 * 所以这个注解是一定要加的！
 * */

/*
* @JsonDeserialize
* 是在反序列化时，所以就是对参数进行封装，故到的是 setXxxx() 方法，
* 所以需要将注解添加到对应的set 方法上，若使用了 Lombok 需要自己定义相应的 set 方法。
* 需要使用 using 属性指定处理参数的类，该类需要继承 JsonDeserializer 类，并重写 deserialize()。

@JsonSerialize
* 是在序列化时，所以需要获取数据，那么需要使用到 getXxxx() 方法，
* 故需要将注解添加到对应的 get 方法上，若使用了 Lombok 需要自己定义相应的 get 方法。
* 需要使用 using 属性指定处理参数的类，该类需要继承 JsonSerializer 类，并重写 serialize()。
* */
